﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.bound
    求解二阶边值问题差分法
    f计算p(x),q(x),r(x)函数值的函数名。
    参数 n: 积分区间等分数
    参数 t0: t0积分区间左端点
    参数 tn: tn积分区间右端点
    参数 y: y[n+1]y[0]存放左端点边界值y(a)，y[n]存放右端点边界值y(b)。返回n+1个等距离散点上的数值解。
    */

    public static unsafe string drive_bound()
    {
        int k;
        double[] y = new double[11];

        y[0] = 1.0;
        y[10] = 2.0;
        gl.f_abcd = fabcd;
        gl.bound(10, 0.0, 1.0, y);

        return gl.html_table("求解二阶边值问题差分法，数值解 y", y);
    }

    // 计算p(x),q(x),r(x)函数值
    private static unsafe void fabcd(double t, double* p, double* q, double* r)
    {
        p[0] = -t / (1 + t * t);
        q[0] = -3 / (1 + t * t);
        r[0] = (6 * t - 3) / (1 + t * t);
        return;
    }
}